package com.haha.email.util;

import java.io.File;
import java.io.FileWriter;
import java.io.StringWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;

import freemarker.template.Configuration;
import freemarker.template.Template;

/**
 * description: FreeMarker Util 工具类
 * @version v1.0
 * @author w
 * @date 2019年7月30日下午10:28:44
 **/
public class FreeMarkerUtil {
	
	
	/**
	 * description: 生成的模板转换成字符串输出 
	 * @param path 模板目录
	 * @param templateName  模板名称
	 * @param dataMap  数据map 
	 * @throws Exception
	 * @return String
	 * @version v1.0
	 * @author w
	 * @date 2019年8月1日 下午1:52:38
	 */
	public static String convertToString(String path , String templateName, Map<String,Object> dataMap) throws Exception {
		StringWriter stringWriter = new StringWriter();
		Template template = getTemplate(path, templateName);
		template.process(dataMap, stringWriter);
		return stringWriter.toString();
	}
	
	/**
	 * description: 根据模板生成静态文件 
	 * @param path
	 * @param templateName
	 * @param targetPath
	 * @param dataMap
	 * @throws Exception
	 * @return void
	 * @version v1.0
	 * @author w
	 * @date 2019年8月1日 下午1:57:13
	 */
	public static void genTemplate(String path , String templateName,String targetPath ,Map<String,Object> dataMap) throws Exception {
		Template template = getTemplate(path, templateName);
		Writer writer = new FileWriter(targetPath);
		template.process(dataMap, writer);
		writer.flush();
		writer.close();
	}
	
	/**
	 * description: 获取模板对象
	 * @param path  模板目录
	 * @param templateName  模板名称
	 * @throws Exception
	 * @return Template
	 * @version v1.0
	 * @author w
	 * @date 2019年8月1日 下午1:51:51
	 */
	public static Template getTemplate(String path , String templateName) throws Exception {
		Configuration configuration = init(path);
		Template template = configuration.getTemplate(templateName);
		return template ;
	}
	
	
	/**
	 * description: 初始化 FreeMarker 相关配置
	 * @param path  模板路径位置 
	 * @throws Exception
	 * @return Configuration
	 * @version v1.0
	 * @author w
	 * @date 2019年8月1日 下午1:51:18
	 */
	private static Configuration init(String path) throws Exception{
		Configuration configuration = new Configuration(Configuration.getVersion());
		configuration.setEncoding(Locale.CHINESE,"UTF-8");
		configuration.setDirectoryForTemplateLoading(new File(path));
		return configuration;
	}
	
	public static void main(String[] args) {
		// 1、使用 demo.txt 生成文件
		String templateName = "demo.txt" ; 
		String path = FreeMarkerUtil.class.getResource("/").getFile();
		Map<String,Object> dataMap = new HashMap<String, Object>();
		dataMap.put("name", "小明");
		dataMap.put("age", "18");
		dataMap.put("address", "北京市朝阳区");
		String str ;
		try {
			str = convertToString(path, templateName, dataMap);
			System.out.println(str);
		} catch (Exception e) {
			e.printStackTrace();
		}
		String targetPath = "genDemo.txt";
		try {
			genTemplate(path, templateName, targetPath, dataMap);
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		// 2、使用 demo.html 生成文件
		templateName = "demo.html" ;
		try {
			str = convertToString(path, templateName, dataMap);
			System.out.println(str);
		} catch (Exception e) {
			e.printStackTrace();
		}
		targetPath = "genDemo.html" ;
		dataMap.put("authCode", 1314520);
		try {
			genTemplate(path, templateName, targetPath, dataMap);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	
}
